<?php
/**
 * telegram电报机器人操作类
 */
namespace Rice\tools;
//类名与文件名一致
class telegram {



    

    //设置电报机器人webhook
    public function setWebhook ($token,$url) {  
        $data = get('https://api.telegram.org/bot'.$token.'/setWebhook?url='.$url);
    return $data;
    }


    //查询电报机器人webhook
    public function getWebhook ($token) {  
        $data = get('https://api.telegram.org/bot'.$token.'/getWebhookInfo');
    return $data;
    }

    //删除电报机器人webhook
    function deleteWebhook ($token) {  
        $data = get('https://api.telegram.org/bot'.$token.'/deleteWebhook');
    return $data;
    }



    //发送文本到电报端
    public function sendMessage($token,$Message){
        $data = urldecode($Message);
        $data = post( 'https://api.telegram.org/bot'.$token.'/sendMessage',$data);
        return $data;
    }



  //发送视频到电报端
    public function sendVideo($token,$video){ 
       $video = urldecode($video);
       $data = post( 'https://api.telegram.org/bot'.$token.'/sendVideo',$video); //发信息到电报
       return $data;
    }
    
    
    //发送图片到电报端
    public function sendPhoto($token,$Photo){ 
       $data = post( 'https://api.telegram.org/bot'.$token.'/sendPhoto',$Photo); //发信息到电报
       return $data;
    }
    

    //描述删除指定聊天
    public function deleteMessage($token,$chat_id,$message_id){
       
        $data['chat_id']=$chat_id;//目标组或目标超级组或通道的用户名的唯一标识符（格式为@channelusername）
        $data['message_id']=$message_id;//目标用户的唯一标识符
        
        $data = post( 'https://api.telegram.org/bot'.$token.'/deleteMessage',json($data,'json'));
        return $data;
    } 


    //描述生成群组邀请链接
    public function exportChatInviteLink($token,$chat_id){
        $data['chat_id']=$chat_id;//目标组或目标超级组或通道的用户名的唯一标识符（格式为@channelusername）
        $data = post( 'https://api.telegram.org/bot'.$token.'/exportChatInviteLink',json($data,'json'));
        $data = json($data,'array');
        return $data;
    } 
    
    
    //转发消息函数
    public function forwardMessage($token,$chat_id,$from_chat_id,$message_id){
        $data['chat_id']=$chat_id;//目标聊天的唯一标识符或目标频道的用户名（格式为@channelusername）
        $data['from_chat_id']=$from_chat_id;//发送原始消息的聊天的唯一标识符（或格式为的频道用户名@channelusername）
        $data['message_id']=$message_id;//在from_chat_id中指定的聊天中的消息标识符
        
        $data = post( 'https://api.telegram.org/bot'.$token.'/forwardMessage',json($data,'json'));
        $data = json($data,'array');
        return $data;
    } 
        
     
    //更改群用户自定义标识（必须用户为管理员）
    public function setChatAdministratorCustomTitle($token,$chat_id,$user_id,$custom_title){
            $data['chat_id']=$chat_id;//群组唯一ID
            $data['user_id']=$user_id;//用户唯一ID
            $data['custom_title']=$custom_title;//自定义标识
            $data = post( 'https://api.telegram.org/bot'.$token.'/setChatAdministratorCustomTitle',json($data,'json'));
            return $data;
    }


    //使用此方法将用户踢出组，超组或通道。成功返回True
    public function kickChatMember($token,$chat_id,$user_id){
            $data['chat_id']=$chat_id;//目标组或目标超级组或通道的用户名的唯一标识符（格式为@channelusername）
            $data['user_id']=$user_id;//目标用户的唯一标
            $data = post( 'https://api.telegram.org/bot'.$token.'/kickChatMember',json($data,'json'));
            return $data;
    }   
  
    //使用此方法可获取聊天中的管理员列表。成功后，返回一个ChatMember对象数组
    public function getChatAdministrators($token,$chat_id){
            $data['chat_id']=$chat_id;//目标组或目标超级组或通道的用户名的唯一标识符（格式为@channelusername）
            $data = post( 'https://api.telegram.org/bot'.$token.'/getChatAdministrators',json($data,'json'));
            return $data;
    } 



    //使用此方法可以取消超级组或频道中以前被踢过的用户的权限。成功返回True。
    public function unbanChatMember($token,$chat_id,$user_id){
            $data['chat_id']=$chat_id;//目标组或目标超级组或通道的用户名的唯一标识符（格式为@channelusername）
            $data['user_id']=$user_id;//目标用户的唯一标识符
            $data = post( 'https://api.telegram.org/bot'.$token.'/unbanChatMember',json($data,'json'));
            return $data;
    } 




    //使用此方法可以限制超组中的用户。成功返回True。。
    public function restrictChatMember($token,$chat_id,$user_id,$permissions,$until_date){
            $data['chat_id']=$chat_id;//目标组或目标超级组或通道的用户名的唯一标识符（格式为@channelusername）
            $data['user_id']=$user_id;//目标用户的唯一标识符
            $data['permissions']=$permissions;//【数组】新用户权限
            $data['until_date']=$until_date;//新用户权限
            $data = post( 'https://api.telegram.org/bot'.$token.'/strictChatMember',json($data,'json'));
            return $data;
    } 



    //描述允许非管理员用户进行聊天的操作。(restrictChatMember附加项)。返回数组
    public function ChatPermissions(){
            $data['can_send_messages'] = ture;//可选的。是的，如果允许用户发送短信，联系人，位置和地点
            $data['can_send_media_messages'] = ture;//可选的。的确，如果允许用户发送音频，文档，照片，视频，视频注释和语音注释
            $data['can_send_polls'] = ture;//可选的。是的，如果允许用户发送民意调查，则意味着
            $data['can_send_other_messages'] = ture;//可选的。的确，如果允许用户发送动画，游戏，贴纸和使用嵌入式机器人，则意味着
            $data['can_add_web_page_previews'] = ture;//可选的。是的，如果允许用户向其消息添加网页预览，则意味着
            $data['can_change_info'] = ture;//可选的。是的，如果允许用户更改聊天标题，照片和其他设置。在公共超群中被忽略
            $data['can_invite_users'] = ture;//可选的。是的，如果允许用户邀请新用户加入聊天
            $data['can_pin_messages'] = ture;//可选的。是的，如果允许用户固定消息。在公共超群中被忽略
            return $data;
    } 






//********************************常用组件以及附参数封装***************************
    


     //取消息类型！
     public function Message_type($message){  
        if(isset($message['video'])){//如果是视频信息
            $data = 'video';
        }elseif (isset($message['video_note'])){//如果是自拍视频信息
            $data = 'video_note'; 
        }elseif (isset($message['voice'])){//如果是语音信息
            $data = 'voice';                  
        }elseif (isset($message['text'])){//如果是文本信息
            $data = 'text';
        }elseif (isset($message['sticker'])){//如果是贴纸信息
            $data = 'sticker';
        }elseif (isset($message['photo'])){//如果是图片信息
            $data = 'photo';
        }elseif (isset($message['animation'])){//如果是gif动画信息
            $data = 'animation';            
        }elseif (isset($message['entities'])){//如果实体信息url
            $data = 'entities';
        }elseif(isset($message['new_chat_member'])){//如果是新加入人员
            $data = 'join';
        }elseif(isset($message['forward_from'])){//如果为转发消息
            $data = '为转发消息';
        }
        return $data;
    }

    //组装返回文本结构，返回字符串！
    public function Assemble_Message($ID,$data,$parse_mode='MarkdownV2'){ 

        $tg_fanhui['chat_id']=$ID; //信息接收人ID
        $tg_fanhui['text']=urlencode($data); //接收文本
        $tg_fanhui['parse_mode']=$parse_mode; //解析模式   
        $tg_fanhui['disable_web_page_preview']=false;//是否开启URL预览！true为开启，false为关闭  

        $tg_fanhui['reply_markup']['type']='InlineKeyboardMarkup'; //开启按钮类型
        $tg_fanhui['reply_markup']['inline_keyboard'][0][0]['text']='申请机器人接入';
        $tg_fanhui['reply_markup']['inline_keyboard'][0][0]['url']='http://www.lunzhe.cc/forum.php?mod=viewthread&tid=559&page=1&extra=#pid952';
        $tg_fanhui['reply_markup']['inline_keyboard'][0][1]['text']='访问乱伦者社区';
        $tg_fanhui['reply_markup']['inline_keyboard'][0][1]['url']='http://www.lunzhe.cc';

        $data = json($tg_fanhui,'json');
        return $data;
    }
    
    
    
     //组装返回图片文字结构，返回字符串！
     public function Assemble_sendPhoto_A($ID,$photo,$text){  
        $data = '?chat_id='.$ID.'&photo='.$photo.'&caption='.$text;
        return $data;
    }
    
    

     //组装返回图片文字按钮结构，返回字符串！
     public function Assemble_sendPhoto_B($ID,$photo,$text,$parse_mode='MarkdownV2'){  

        $tg_fanhui['chat_id']=$ID; //信息接收人ID
        $tg_fanhui['photo']=$photo; //图片地址
        $tg_fanhui['caption']=$text; //图片文本
        $tg_fanhui['parse_mode']=$parse_mode; //解析模式   
        $tg_fanhui['reply_markup']['type']='InlineKeyboardMarkup'; //开启按钮类型
        $tg_fanhui['reply_markup']['inline_keyboard'][0][0]['text']='点击访问网站';
        $tg_fanhui['reply_markup']['inline_keyboard'][0][0]['url']='http://www.lunzhe.cc';
        $data = urldecode(json_encode($tg_fanhui));
       
        return $data;
    }





        //组装返回视频结构，返回字符串！(视频发送)！
    public function Assemble_video($message,$parse_mode='MarkdownV2'){   
       
        $tg_fanhui['chat_id']=$message['from']['id']; //发送人ID,存数据库json字符串用
        $tg_fanhui['video']=$message['video']['file_id']; //视频地址
        $tg_fanhui['duration']=$message['video']['duration']; //时长
        $tg_fanhui['width']=$message['video']['width']; //视频宽度
        $tg_fanhui['height']=$message['video']['height']; //视频高度
        $tg_fanhui['parse_mode']=$parse_mode; //解析模式   
        $tg_fanhui['thumb']['file_id']=$message['video']['thumb']['file_id'];//预览图片地址
        $tg_fanhui['thumb']['file_unique_id']=$message['video']['thumb']['file_unique_id'];//预览图片唯一字符
        $tg_fanhui['thumb']['file_size']=$message['video']['thumb']['file_size'];//预览图片大小
        $tg_fanhui['thumb']['width']=$message['video']['thumb']['width'];//预览图片宽度
        $tg_fanhui['thumb']['height']=$message['video']['thumb']['height'];//预览图片高度
        $data = json($tg_fanhui,'json');
        return  $data;       
    }
  





  
    //组装返回视频结构，返回字符串！(存数据库)！
    public function Assemble_video_sql($vd_id,$message,$parse_mode='MarkdownV2'){   
       
        $tg_fanhui['chat_id']=$message['from']['id']; //发送人ID,存数据库json字符串用
        $tg_fanhui['video']=$message['video']['file_id']; //视频地址
        $tg_fanhui['duration']=$message['video']['duration']; //时长
        $tg_fanhui['width']=$message['video']['width']; //视频宽度
        $tg_fanhui['height']=$message['video']['height']; //视频高度
        $tg_fanhui['parse_mode']=$parse_mode; //解析模式   
        $tg_fanhui['thumb']['file_id']=$message['video']['thumb']['file_id'];//预览图片地址
        $tg_fanhui['thumb']['file_unique_id']=$message['video']['thumb']['file_unique_id'];//预览图片唯一字符
        $tg_fanhui['thumb']['file_size']=$message['video']['thumb']['file_size'];//预览图片大小
        $tg_fanhui['thumb']['width']=$message['video']['thumb']['width'];//预览图片宽度
        $tg_fanhui['thumb']['height']=$message['video']['thumb']['height'];//预览图片高度
        $data = urldecode(json_encode($tg_fanhui));

         if(isset($message['chat']['title'])){
             $chat_title=$message['chat']['title'];
         }else{
             $chat_title='';
         }
        $video = array(
        'chat_id'=>$message['from']['id'],
        'name'=>$message['from']['last_name'].$message['from']['first_name'],
        'video'=>$data,
        'vd_id'=>$vd_id,
        'title'=>$chat_title,
        'file_unique_id'=>$message['video']['file_unique_id'],
        'date'=>time()
          
        );
        return $video;
    }
    
}